// profile.js
import { isLoggedIn, getUserInfo as getLocalUserInfo, processOssUrl, updateUserInfo } from '../../utils/http';
import { userApi } from '../../services/api';

// OSS前缀常量
const OSS_PREFIX = 'https://oss.h-ksg.com/';

/**
 * 处理头像URL，确保包含OSS前缀
 * @param {string} avatarUrl 头像URL
 * @returns {string} 处理后的URL
 */
function processAvatarUrl(avatarUrl) {
  if (!avatarUrl) return '';
  
  // 如果不是以http开头，添加OSS前缀
  if (!avatarUrl.startsWith('http')) {
    return OSS_PREFIX + avatarUrl;
  } else if (avatarUrl.includes('oss.h-ksg.com')) {
    // 如果已经包含OSS域名但格式不对，规范化URL
    const ossPath = avatarUrl.split('oss.h-ksg.com/')[1];
    if (ossPath) {
      return OSS_PREFIX + ossPath;
    }
  }
  
  return avatarUrl;
}

Page({
  data: {
    isLoggedIn: false,
    userInfo: {},
    userId: '',
    maskedPhone: '',
    avatarUrl: ''  // 添加专门存储头像URL的字段
  },
  
  onLoad() {
    // 检查登录状态
    this.checkLoginStatus();
  },
  
  onShow() {
    // 页面显示时重新检查登录状态并刷新用户信息
    this.checkLoginStatus();
    // 如果已登录，调用API获取最新用户信息
    if (this.data.isLoggedIn) {
      this.fetchUserInfo();
    }
  },
  
  // 检查登录状态
  checkLoginStatus() {
    const loggedIn = isLoggedIn();
    if (loggedIn) {
      const userInfo = getLocalUserInfo();
      
      // 创建手机号码掩码 (例如: 138****8888)
      let maskedPhone = '';
      if (userInfo.phone) {
        maskedPhone = userInfo.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
      }
      
      // 确保unReadMsgCount字段存在
      if (typeof userInfo.unReadMsgCount === 'undefined') {
        userInfo.unReadMsgCount = 0;
      }
      
      // 获取头像URL - 优先使用缓存中的avatarUrl，其次是headImg
      let avatarUrl = '';
      if (userInfo.avatarUrl) {
        avatarUrl = userInfo.avatarUrl;
      } else if (userInfo.headImg) {
        avatarUrl = userInfo.headImg;
      }
      
      // 确保头像URL包含正确的前缀
      if (avatarUrl) {
        avatarUrl = processOssUrl(avatarUrl);
      }
      
      // 尝试从本地缓存中获取头像
      this.tryGetAvatarFromCache(avatarUrl);
      
      this.setData({
        isLoggedIn: true,
        userInfo: userInfo,
        userId: userInfo.userId || '',
        maskedPhone: maskedPhone,
        avatarUrl: avatarUrl
      });
    } else {
      this.setData({
        isLoggedIn: false,
        userInfo: {},
        userId: '',
        maskedPhone: '',
        avatarUrl: ''
      });
    }
  },
  
  // 尝试从本地缓存获取头像
  tryGetAvatarFromCache(avatarUrl) {
    if (!avatarUrl) return;
    
    // 尝试从本地缓存获取头像
    const fs = wx.getFileSystemManager();
    // 生成唯一的缓存文件名：使用URL的哈希值
    const md5Url = this.simpleHash(avatarUrl);
    const cachePath = `${wx.env.USER_DATA_PATH}/${md5Url}.jpg`;
    
    try {
      // 检查文件是否存在
      fs.accessSync(cachePath);
      console.log('从缓存加载头像:', cachePath);
      
      // 文件存在，直接使用缓存路径
      this.setData({
        avatarUrl: cachePath
      });
    } catch (e) {
      // 文件不存在，需要下载
      console.log('缓存中没有头像，需要下载:', avatarUrl);
      this.downloadAndCacheAvatar(avatarUrl, cachePath);
    }
  },
  
  // 下载并缓存头像
  downloadAndCacheAvatar(avatarUrl, cachePath) {
    wx.downloadFile({
      url: avatarUrl,
      success: (res) => {
        if (res.statusCode === 200) {
          const fs = wx.getFileSystemManager();
          // 将临时文件保存到缓存目录
          fs.saveFile({
            tempFilePath: res.tempFilePath,
            filePath: cachePath,
            success: () => {
              console.log('头像已缓存到:', cachePath);
              this.setData({
                avatarUrl: cachePath
              });
            },
            fail: (err) => {
              console.error('缓存头像失败:', err);
              // 如果缓存失败，仍使用原始URL
              this.setData({
                avatarUrl: avatarUrl
              });
            }
          });
        } else {
          console.error('下载头像失败:', res.statusCode);
        }
      },
      fail: (err) => {
        console.error('下载头像失败:', err);
      }
    });
  },
  
  // 简单的哈希函数，用于生成缓存文件名
  simpleHash(str) {
    let hash = 0;
    for (let i = 0; i < str.length; i++) {
      const char = str.charCodeAt(i);
      hash = ((hash << 5) - hash) + char;
      hash = hash & hash; // Convert to 32bit integer
    }
    return Math.abs(hash).toString(16);
  },
  
  // 调用API获取最新用户信息
  fetchUserInfo() {
    
    userApi.getUserInfo()
      .then(res => {
        if (res.status === 200) {
          const serverUserInfo = res.data;
          
          // 创建手机号码掩码
          let maskedPhone = '';
          if (serverUserInfo.phone) {
            maskedPhone = serverUserInfo.phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
          }
          
          // 确保未读消息计数存在
          if (typeof serverUserInfo.unReadMsgCount === 'undefined') {
            serverUserInfo.unReadMsgCount = 0;
          }
          
          // 获取头像URL - 优先使用avatarUrl，其次是headImg
          let avatarUrl = '';
          if (serverUserInfo.avatarUrl) {
            avatarUrl = serverUserInfo.avatarUrl;
          } else if (serverUserInfo.headImg) {
            avatarUrl = serverUserInfo.headImg;
          }
          
          // 确保头像URL包含正确的前缀
          if (avatarUrl) {
            avatarUrl = processOssUrl(avatarUrl);
            // 尝试缓存新头像
            this.tryGetAvatarFromCache(avatarUrl);
          }
          
          // 使用服务器返回的数据更新本地缓存
          // 重要：不更新token和randomKey
          const updatedInfo = updateUserInfo({
            userId: serverUserInfo.userId,
            userName: serverUserInfo.userName,
            phone: serverUserInfo.phone,
            headImg: serverUserInfo.headImg,
            avatarUrl: serverUserInfo.avatarUrl || serverUserInfo.headImg,
            unReadMsgCount: serverUserInfo.unReadMsgCount,
            isAdmin: serverUserInfo.isAdmin
          });
          
          // 更新页面数据
          this.setData({
            userInfo: serverUserInfo,
            userId: serverUserInfo.userId || '',
            maskedPhone: maskedPhone,
            avatarUrl: avatarUrl || this.data.avatarUrl
          });
          
          console.log('用户信息已更新并缓存', updatedInfo);
        }
      })
      .catch(err => {
        console.error('获取用户信息失败', err);
      })
  },
  
  // 选择头像或点击头像区域
  chooseAvatar() {
    if (!this.data.isLoggedIn) {
      this.navigateToLogin();
      return;
    }
    
    this.navigateToEditProfile();
  },
  
  // 导航到个人信息编辑页
  navigateToEditProfile() {
    if (!this.data.isLoggedIn) {
      this.navigateToLogin();
      return;
    }
    
    wx.navigateTo({
      url: '/pages/profile/edit-profile/edit-profile'
    });
  },
  
  // 点击用户资料区域
  handleUserProfileTap() {
    if (!this.data.isLoggedIn) {
      this.navigateToLogin();
    } else {
      this.navigateToEditProfile();
    }
  },
  
  // 导航到登录页
  navigateToLogin() {
    wx.navigateTo({
      url: '/pages/login/login'
    });
  },
  
  // 导航到质保记录页
  navigateToWarranty() {
    if (!this.data.isLoggedIn) {
      this.navigateToLogin();
      return;
    }
    
    // 获取用户手机号
    const phone = this.data.userInfo.phone || '';
    console.log('phone', phone)
    // 跳转到质保查询页面，并传递手机号参数
    wx.navigateTo({
      url: `/pages/warranty/query/index?phone=${phone}`
    });
  },

  // 导航到库存信息页（管理员专用）
  navigateToStockInfo() {
    if (!this.data.isLoggedIn) {
      this.navigateToLogin();
      return;
    }

    // 检查是否为管理员
    if (this.data.userInfo.isAdmin !== 1) {
      wx.showToast({
        title: '无权限访问',
        icon: 'none'
      });
      return;
    }

    wx.navigateTo({
      url: '/pages/stock-info/index'
    });
  },

  // 导航到KSG介绍
  navigateToAbout() {
    wx.navigateTo({
      url: '/pages/profile/about-us/about-us'
    });
  },
  
  // 导航到消息通知页
  navigateToNotifications() {
    if (!this.data.isLoggedIn) {
      this.navigateToLogin();
      return;
    }
    
    wx.navigateTo({
      url: '/pages/profile/notifications/notifications'
    });
  },
  
  // 导航到账户安全页
  navigateToAccountSecurity() {
    if (!this.data.isLoggedIn) {
      this.navigateToLogin();
      return;
    }
    
    wx.navigateTo({
      url: '/pages/profile/account-security/account-security'
    });
  },
  
  // 导航到设置页
  navigateToSettings() {
    wx.showToast({
      title: '设置功能开发中',
      icon: 'none'
    });
  },
  
  // 联系客服
  contactCustomerService() {
    wx.showModal({
      title: '联系客服',
      content: '客服热线：021-64880166\n工作时间：周一至周五 9:00-18:00',
      confirmText: '拨打电话',
      cancelText: '取消',
      success(res) {
        if (res.confirm) {
          wx.makePhoneCall({
            phoneNumber: '02164880166',
            fail(err) {
              console.error('拨打电话失败', err);
            }
          });
        }
      }
    });
  },
  
  // 退出登录
  logout() {
    wx.showModal({
      title: '提示',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除登录信息
          wx.removeStorageSync('userInfo');
          wx.removeStorageSync('userId');
          wx.removeStorageSync('token');
          wx.removeStorageSync('randomKey');
          
          this.setData({
            isLoggedIn: false,
            userInfo: {},
            userId: '',
            maskedPhone: '',
            avatarUrl: ''
          });
          
          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          });
        }
      }
    });
  }
}) 